package com.wjm.api.FileOutputStream;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * Data:2022年07月09日
 * Author:wjm
 * Content: OutputStream(字节输出流抽象类)  和 FileOutputStream实现类
 *
 *
 *  OutputStream中的方法
 *            public void close()  关闭输出流并释放与此流相关的任何系统资源
 *            public void flush()  刷新此输出流并强制任何缓冲的输出字节被写出
 *            public void write(byte[] b)  将b.length字节从指定的字节数组写如此输出流
 *            public void write(byte[] b,int off,int len)  从指定的字节数组写入len长度的字节，从偏移量off开始
 *            public abstract void write(int b)  将自定的字节写入输出流
 *  注意：write(int b)中的int b是 ASCII表中的值，比如你想写入英文字母：a 那么应该传a在ASCII表中对应的值97
 *
 *
 *  FileOutputStream的构造方法
 *            public FileOutputStream(File file)   默认为false
 *            public FileOutputStream(String name) 默认为false
 *            public FileOutputStream(File file, boolean append)   创建文件输出流，以指定的File对象表示的文件
 *            public FileOutputStream(String name, boolean append) 创建文件输出流，以指定的名称文件表示的文件
 *   注意：boolean类型的参数，设置为true实现数据的追加(追加模式)，设置为false实现数据的覆盖(覆盖模式)
 *
 *
 *  回车符(\r):回到一行的开头(return). 换行符(\n):下一行(newline)
 *  系统中的换行：
 *            Windows系统：每行结尾是 回车+换行，即\r\n
 *            Unix系统：每行结尾只有换行，即\n
 *            Mac系统：每行结尾是回车，即\r。从Mac OSX开始与Linux统一
 *
 *  String中获取字符串对应的ASCII值：
 *            getBytes()可以获取字符串所对应的ASCII值，并返回byte[]数组
 *
 */
public class FileOutputStreamDemo1 {
    public static void main(String[] args) throws IOException {
        //创建文件对象
        File file = new File("c.txt");

        //创建输出流对象
        FileOutputStream fos1 = new FileOutputStream(file,true);
        //向指定文件对象中写入数据
        fos1.write(97);//a 对应的ASCII表的值为 97
        fos1.write(98);//b
        fos1.write(49);//1 对应的ASCII表的值为 49
        fos1.write(50);//2

        //换行
        fos1.write("\r\n".getBytes());

        String s = "java Hellow!";
        //getBytes()可以获取字符串所对应的ASCII值，并返回byte[]数组
        byte[] bytes =s.getBytes();
        //将字符串写入到指定文件
        fos1.write(bytes);
        //从指定byte[]数组开始位置写入指定长度的字节
        fos1.write(bytes,5,6);
        //换行
        fos1.write("\r\n".getBytes());

        //关闭流连接，并释放系统资源
        fos1.close();
    }
}
